import scrapy

from jiandanPro.items import JiandanproItem

class JdSpider(scrapy.Spider):
    name = 'jd'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['http://i.jandan.net/']

    # 基于终端指令：
    # def parse(self, response):
    #     #解析：作者名称和段子内容
    #     div_list = response.xpath('//*[@id="maincontent"]/div[1]')
    #     for div in div_list:
    #         all_data = []#存储所有解析到的数据
    #         #xpath返回的是列表，但是列表元素一定是selector类型的对象
    #         # .extract可以将selector对象当中data参数存储的字符串提取出来
    #         #如果是列表调用了‘.extract’之后，则表示将列表中每一个selector对象中data对应的字符串提取出来
    #         #author = div.xpath('//*[@id="post-111455"]/a/text()')[0].extract()
    #         #直接返回字符串用‘.extract_first()’，.extract_first()表示将列表中第0个列表元素所对应的selector进行‘.extract’操作，‘.extract_first()’返回的是字符串而不是列表
    #         author = div.xpath('//*[@id="post-111455"]/a/text()').extract_first()
    #         content = div.xpath('//*[@id="maincontent"]/div[1]/div/div[2]/text()')[0].extract()
    #         #.join(content)表示将列表转换为字符串
    #         content=''.join(content)
    #
    #         #print(author,content)
    #         #break
    #         dic={
    #             'author':author,
    #             'content':content
    #         }
    #         all_data.append(dic)
    #     return all_data

    #基于管道
    def parse(self, response):
        # 解析：作者名称和段子内容
        div_list = response.xpath('//*[@id="maincontent"]/div[1]')
        for div in div_list:
            all_data = []  # 存储所有解析到的数据
            # xpath返回的是列表，但是列表元素一定是selector类型的对象
            # .extract可以将selector对象当中data参数存储的字符串提取出来
            # 如果是列表调用了‘.extract’之后，则表示将列表中每一个selector对象中data对应的字符串提取出来
            # author = div.xpath('//*[@id="post-111455"]/a/text()')[0].extract()
            # 直接返回字符串用‘.extract_first()’，.extract_first()表示将列表中第0个列表元素所对应的selector进行‘.extract’操作，‘.extract_first()’返回的是字符串而不是列表
            author = div.xpath('//*[@id="post-111455"]/a/text()').extract_first()
            content = div.xpath('//*[@id="maincontent"]/div[1]/div/div[2]/text()')[0].extract()
            # .join(content)表示将列表转换为字符串
            #         content=''.join(content)

            #将解析的数据封装存储到item类型的对象
            item = JiandanproItem()
            item['author'] = author
            item['content'] = content

            #将item提交给管道
            yield item



